#!/usr/bin/env node

/**
 * 火之夜工作室 Flutter 项目创建工具
 * 
 * 主入口文件，处理命令行参数并调用相应功能
 */


import { program } from 'commander'
import chalk from 'chalk';
import { createProject } from './lib/createProject.js';
import { readFileSync } from 'fs';
import { fileURLToPath } from 'url';
import { dirname, join } from 'path';

// 获取package.json内容
const __dirname = dirname(fileURLToPath(import.meta.url));
const packageJson = JSON.parse(readFileSync(join(__dirname, 'package.json'), 'utf8'));

// 设置版本号和描述
program
  .version(packageJson.version)
  .description(chalk.cyan('火之夜工作室 Flutter 项目创建工具'));

// 

// 创建项目命令
program
  .command('create')
  .description('创建新的Flutter项目')
  .option('-t, --project-type <type>', '项目类型: app, module, package, plugin', 'app')
  .option('-m, --template-type <type>', '模板类型: only, min, normal, pro', 'normal')
  .option('-s, --state-manager <name>', '状态管理: state, GetX, Provider, MobX, Bloc, Riverpod', 'GetX')
  .option('-n, --project-name <name>', '项目名称')
  .option('-p, --package-name <name>', '包名(com.example.app)')
  .option('-d, --parent-dir <path>', '项目存放目录')
  .option('-i, --ide <type>', '使用的IDE: vscode, android_studio, open_folder , manual', 'vscode')
  .option('-f, --flutter-sdk <path>', '自定义Flutter SDK路径')
  .option('-h, --help', '显示创建命令帮助信息')
  .action((options) => {
    if (options.help) {
      console.log(chalk.bold.greenBright('flu-cli create - 创建新的Flutter项目'));
      console.log('用法: flu-cli create [选项]');
      console.log('选项:');
      console.log('  -t, --project-type <type>    项目类型 (app, module, package, plugin) [默认: app]');
      console.log('  -m, --template-type <type>   模板类型 (only, min, normal, pro) [默认: pro]');
      console.log('  -s, --state-manager <name>   状态管理方案 (state, GetX,) [默认: GetX]');
      console.log('  -n, --project-name <name>    项目名称 [默认: hzy_example_${项目类型}]');
      console.log('  -p, --package-name <name>    包名 [默认: com.example.${项目类型}]');
      console.log('  -d, --parent-dir <path>      项目存放目录 [默认: 当前目录]');
      console.log('  -i, --ide <choice>           IDE选择 (vscode, android_studio, open_folder, manual) [默认: vscode]');
      console.log('  -f, --flutter-sdk <path>     自定义Flutter SDK路径 [默认: 系统环境变量中的flutter]');
      console.log('  -h, --help                   显示本帮助信息');
      process.exit(0);
    }

    console.log(chalk.bold.greenBright('欢迎使用 火之夜工作室 Flutter 项目创建工具'));

    // 检查是否提供了命令行参数
    const hasCommandLineArgs = options.projectName ||
      options.packageName ||
      options.projectType !== 'app' ||
      options.templateType !== 'normal' ||
      options.stateManager !== 'GetX' ||
      options.parentDir || options.ide !== 'vscode' || options.flutterSdk;

    // 如果提供了命令行参数，则直接使用这些参数创建项目
    // 否则使用交互式方式获取参数
    createProject({
      useCommandLineArgs: hasCommandLineArgs,
      projectType: options.projectType,
      templateType: options.templateType,
      stateManager: options.stateManager,
      projectName: options.projectName,
      packageName: options.packageName,
      parentDir: options.parentDir,
      ideChoice: options.ide,
      flutterSdkPath: options.flutterSdk,
    });
  });

// 全局帮助处理
if (process.argv.includes('-h') || process.argv.includes('--help')) {
  if (process.argv.length <= 3) {
    console.log('flu-cli - 火之夜工作室Flutter项目创建工具');
    console.log('版本: ' + packageJson.version);
    console.log('用法: flu-cli [命令] [选项]\n');
    console.log('命令:');
    console.log('  create    创建新的Flutter项目\n');
    console.log('全局选项:');
    console.log('  -V, --version   显示版本号');
    console.log('  -h, --help      显示全局帮助信息\n');
    console.log('使用 "flu-cli [命令] --help" 查看特定命令的详细帮助');
    process.exit(0);
  }
  program.parse(process.argv);
}



// 如果没有提供命令，默认执行创建项目
if (process.argv.length === 2) {
  console.log(chalk.bold.greenBright('欢迎使用 火之夜工作室 Flutter 项目创建工具\n'));
  createProject({});
} else {
  program.parse(process.argv);
}